import { find, remove, isEqual } from 'lodash'

/** pengding 状态的请求列表,[{url:"",data:{}}] */
let pendingReqsMap = []

/**
 * 开启重复请求拦截（如果第一次请求未返回，又发起一次一样的请求，则将第二次请求cancel）
 * @param {*} url 请求地址
 * @param {*} data 提交数据
 */
export const applyCancel = (url, data, source) => {
  // 如果 url 和 data 一致，则认为是重复请求
  const findOne = find(pendingReqsMap, target => target.url === url && isEqual(target.data, data))
  if (findOne) {
    source.cancel() // 终止重复请求
    return
  }
  pendingReqsMap.push({ url, data })
}
/** 已经完成的请求从请求列表中移除 */
export const removeFromReqsMap = (url, data) => {
  remove(pendingReqsMap, target => target.url === url && isEqual(target.data, data))
}
